package com.sf.osms.dep.biz;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.sf.osms.dep.domain.Agent;
import com.sf.osms.dep.domain.ChargeBase;
import com.sf.osms.dep.domain.Router;
import com.sf.osms.dep.domain.RouterProblemRecord;
import com.sf.osms.dep.domain.RouterTmp;

public interface ICommonServiceBiz{
	
	/**
	 * 根据Agent的ID来进行查找AgentInfo,包括Agent所有的附带信息（AgentNetpoint，AgentConfig，AgentFileMap）
	 * @param agentId
	 * @return
	 */
	Agent findAgentInfoById(Long agentId);
	
	/**
	 * 查找所有的AgentInfo,包括Agent所有的附带信息（AgentNetpoint，AgentConfig，AgentFileMap）
	 * @return
	 */
	List<Agent> findAllAgentInfo();
	
	/**
	 * 根据路由信息查找路由信息
	 * @param sfWayfill 运单号
	 * @param eventCode 节点码
	 * @param barDate 把枪日期
	 * @param barTime 把枪时间
	 * @param　数据是否为失败状态
	 * @return
	 * @throws Exception
	 */
	List<Router> findRouterInfo(String sfWayfill,Integer eventCode, boolean failed) throws Exception;
	
	/**
	 * DB存入Router
	 * @param router
	 * @throws Exception
	 */
	void insertRouter(Router router) throws Exception;
	
	/**
	 * 批量插入路由信息
	 * @param routers
	 * @throws Exception
	 */
	void insertRouterBatch(Collection<Router> routers) throws Exception;
	
	/**
	 * 插入路由异常信息
	 * @param record
	 * @throws Exception
	 */
	void insertRouterProblem(RouterProblemRecord record) throws Exception;
	
	/**
	 * 批量删除路由信息
	 * @param routers
	 * @throws Exception
	 */
	void removeRouterBatch(Collection<Router> routers) throws Exception;
	
	/**
	 * 批量插入路由异常信息
	 * @param record
	 * @throws Exception
	 */
	void insertRouterProblemBatch(List<RouterProblemRecord> records) throws Exception;
	
	/**
	 * 将对象source映射到dest中，这里通过dozer的注解进行映射
	 * @param <T>
	 * @param source
	 * @param dest
	 * @throws Exception
	 */
	<T> T mapBean(Object source,Class<T> dest) throws Exception;
	
	/**
	 * 根据路由状态查询路由信息
	 * @param status
	 * @return
	 */
	List<Router> queryRouterByStatus(int status);
	
	/**
	 * 更新操作
	 * @param router
	 */
	void updateRoute(List<Router> router);
	
	/**
	 * 得到所有的sfcode，eventCode，reasonCode的形式，若没有resonCode，则只是eventCode
	 * @return
	 */
	List<String> findAllSfCode();
	
	void insertRouterTmp(Collection<RouterTmp> routerTmps);
	
	List<Router> getRouterInfo(Router router);
	/**
	 * 得到需要回单的节点数据
	 * @return
	 */
	List<Router> queryRouterNeedPod(String country);
	
	
	/**
	 * 得到代理所有的国家代码
	 */
	Set<String> queryAgentCountry();
	
	Map<String,ChargeBase> queryHandOverInfo(Set<String> sfWaybillNos);
	
	/**
	 * 根据代理的名称查找代理信息
	 * @param name
	 * @return
	 */
	Agent findAgentInfo(String name);
	
}
